/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.Administracion.Configuracion;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.rave.web.ui.component.Button;
import com.sun.rave.web.ui.component.TextArea;
import com.sun.rave.web.ui.component.TextField;
import entidad.Persona;
import entidad.Usuario;
import entidad.ayudantias.Configuracion;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import wasolicitudesfiec.SessionBean1;
import wasolicitudesfiec.RequestBean1;
import wasolicitudesfiec.ApplicationBean1;
import wasolicitudesfiec.Menu;
import wasolicitudesfiec.authentication.AuthenticationPhaseListener;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;
import wasolicitudesfiec.logicacontrol.Logica;
import web.util.Constantes;
import web.util.ManejadorCookies;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @version MantenimientoConfiguracion.java
 * @version Created on 18-ene-2009, 15:11:13
 * @author Administrador
 */
public class MantenimientoConfiguracion extends AbstractPageBean {

	private Logica logica;
	private HttpServletResponse response;
	private HttpServletRequest request;
	private String contextPath;
	// <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

	/**
	 * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
	 * This method is automatically generated, so any user-specified code inserted
	 * here is subject to being replaced.</p>
	 */
	private void _init() throws Exception {
	}
	private TextField txtNombre = new TextField();

	public TextField getTxtNombre() {
		return txtNombre;
	}

	public void setTxtNombre(TextField tf) {
		this.txtNombre = tf;
	}
	private TextField txtValor = new TextField();

	public TextField getTxtValor() {
		return txtValor;
	}

	public void setTxtValor(TextField tf) {
		this.txtValor = tf;
	}
	private TextArea txtDescripcion = new TextArea();

	public TextArea getTxtDescripcion() {
		return txtDescripcion;
	}

	public void setTxtDescripcion(TextArea ta) {
		this.txtDescripcion = ta;
	}
	private int idConfiguracion;

	/**
	 * @return the idConfiguracion
	 */
	public int getIdConfiguracion() {
		return idConfiguracion;
	}

	/**
	 * @param idConfiguracion the idConfiguracion to set
	 */
	public void setIdConfiguracion(int idConfiguracion) {
		this.idConfiguracion = idConfiguracion;
	}
	private Button btnGuardar = new Button();

	public Button getBtnGuardar() {
		return btnGuardar;
	}

	public void setBtnGuardar(Button b) {
		this.btnGuardar = b;
	}

	// </editor-fold>
	/**
	 * <p>Construct a new Page bean instance.</p>
	 */
	public MantenimientoConfiguracion() {
	}

	/**
	 * <p>Callback method that is called whenever a page is navigated to,
	 * either directly via a URL, or indirectly via page navigation.
	 * Customize this method to acquire resources that will be needed
	 * for event handlers and lifecycle methods, whether or not this
	 * page is performing post back processing.</p>
	 *
	 * <p>Note that, if the current request is a postback, the property
	 * values of the components do <strong>not</strong> represent any
	 * values submitted with this request.  Instead, they represent the
	 * property values that were saved for this view when it was rendered.</p>
	 */
	@Override
	public void init() {
		// Perform initializations inherited from our superclass
		super.init();
		// Perform application initialization that must complete
		// *before* managed components are initialized
		// TODO - add your own initialiation code here

		// <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
		// Initialize automatically managed components
		// *Note* - this logic should NOT be modified
		try {
			_init();
		} catch (Exception e) {
			log("MantenimientoConfiguracion Initialization Failure", e);
			throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
		}

		// </editor-fold>
		// Perform application initialization that must complete
		// *after* managed components are initialized
		 Usuario usuario = (Usuario) getSessionMap().get(AuthenticationPhaseListener.USER_SESSION_KEY);
         logica = new Logica();
        FacesMessage message;
        String nombreRol = Constantes.Rol.Administrador.getNombreEnBD();
        try {
            Persona persona = logica.leerPersonaPorUsuario(usuario.getUsuario());
            if (!logica.isUsuarioMiembrodeRol(persona.getIdPersona(), nombreRol)) {
                CTRL_Base ctrl = new CTRL_Base(this.getFacesContext());
                ctrl.addCookieMensaje(Constantes.Mensajes.noAdministrador, null);
                ctrl.redireccionar("/WA_SolicitudesFIEC/faces/general/Mensaje.jsp");
            }
        } catch (SQLException ex) {
            Logger.getLogger(MantenimientoConfiguracion.class.getName()).log(Level.SEVERE, null, ex);
            message = new FacesMessage(FacesMessage.SEVERITY_FATAL, ex.getMessage(), "");
            getFacesContext().addMessage(null, message);
        }
        getMenu().setTitulo("Mantenimiento de Configuración");
		response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
		request = (HttpServletRequest) getFacesContext().getExternalContext().getRequest();
		contextPath = getFacesContext().getExternalContext().getRequestContextPath();
		String[] lstId = getFacesContext().getExternalContext().getRequestParameterValuesMap().get("id");
		if (lstId != null && lstId.length > 0) {
			setIdConfiguracion(Integer.parseInt(lstId[0]));
			if (!isPostBack()) {
				cargarConfiguracion(getIdConfiguracion());
			}
		}
	}

	/**
	 * <p>Callback method that is called after the component tree has been
	 * restored, but before any event processing takes place.  This method
	 * will <strong>only</strong> be called on a postback request that
	 * is processing a form submit.  Customize this method to allocate
	 * resources that will be required in your event handlers.</p>
	 */
	@Override
	public void preprocess() {
	}

	/**
	 * <p>Callback method that is called just before rendering takes place.
	 * This method will <strong>only</strong> be called for the page that
	 * will actually be rendered (and not, for example, on a page that
	 * handled a postback and then navigated to a different page).  Customize
	 * this method to allocate resources that will be required for rendering
	 * this page.</p>
	 */
	@Override
	public void prerender() {
	}

	/**
	 * <p>Callback method that is called after rendering is completed for
	 * this request, if <code>init()</code> was called (regardless of whether
	 * or not this was the page that was actually rendered).  Customize this
	 * method to release resources acquired in the <code>init()</code>,
	 * <code>preprocess()</code>, or <code>prerender()</code> methods (or
	 * acquired during execution of an event handler).</p>
	 */
	@Override
	public void destroy() {
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected SessionBean1 getSessionBean1() {
		return (SessionBean1) getBean("SessionBean1");
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected RequestBean1 getRequestBean1() {
		return (RequestBean1) getBean("RequestBean1");
	}

	/**
	 * <p>Return a reference to the scoped data bean.</p>
	 *
	 * @return reference to the scoped data bean
	 */
	protected ApplicationBean1 getApplicationBean1() {
		return (ApplicationBean1) getBean("ApplicationBean1");
	}

	public Menu getMenu() {
		return (Menu) getBean("SolicitudesFIEC$Menu");
	}

	private void cargarConfiguracion(int idConfiguracion) {
		FacesMessage message;
		Configuracion configuracion;
		boolean error = false;
		try {
			configuracion = logica.leerConfiguracionPorId(idConfiguracion);
			getTxtNombre().setValue(configuracion.getNombre());
			getTxtDescripcion().setValue(configuracion.getDescripcion());
			getTxtValor().setValue(configuracion.getValor());
		} catch (SQLException ex) {
			Logger.getLogger(MantenimientoConfiguracion.class.getName()).log(Level.SEVERE, null, ex);
			message = new FacesMessage(FacesMessage.SEVERITY_FATAL, ex.getMessage(), "");
			getFacesContext().addMessage(null, message);
			error = true;
		} catch (MensajeException ex) {
			Logger.getLogger(MantenimientoConfiguracion.class.getName()).log(Level.SEVERE, null, ex);
			message = new FacesMessage(FacesMessage.SEVERITY_FATAL, ex.getMessage(), "");
			getFacesContext().addMessage(null, message);
			error = true;
		}
		if (error) {
			getBtnGuardar().setDisabled(true);
		}
	}

	public String btnGuardar_action() {
		Configuracion configuracion;

		try {
			if (getIdConfiguracion() > 0) {
				configuracion = logica.leerConfiguracionPorId(getIdConfiguracion());
				configuracion.setDescripcion((String) getTxtDescripcion().getValue());
				configuracion.setValor((String) getTxtValor().getValue());
				logica.guardarConfiguracion(configuracion);
				ManejadorCookies.agregarCookieMensaje(response, "La configuración se guardo satisfactoriamente", contextPath + "/faces/Administracion/Configuracion");
				return "guardarConfiguracion";
			}
		} catch (SQLException ex) {
			Logger.getLogger(MantenimientoConfiguracion.class.getName()).log(Level.SEVERE, null, ex);
		} catch (MensajeException ex) {
			Logger.getLogger(MantenimientoConfiguracion.class.getName()).log(Level.SEVERE, null, ex);
		}
		return null;
	}
}

